package com.itheima.controller;

import com.itheima.aspect.annotation.OperationLog;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/depts")// 分类的请求路径， 请求的完整路径=类上的路径+方法上的路径
public class DeptController {

    @Autowired
    private DeptService deptService;

    @Value("${server.port}")
    public int port;
    @GetMapping
    public Result list() {
        log.info("在端口号为{}服务器上, 查询部门列表...", port);
        //int i = 1/0;
        //2.调用service查询数据
        // 你们
        List<Dept> deptList = deptService.list();
        //3.响应结果
        /*Result result = new Result();
        result.setCode(1);//成功
        result.setMsg("success");
        result.setData(deptList);*/
        return Result.success(deptList);
    }


    /**
     * 【推荐】
     * 方式三：如果请求参数名与形参变量名相同，直接定义方法形参即可接收。（省略@RequestParam）
     * /depts?id=1
     */
    @DeleteMapping
    @OperationLog
    public Result deleteById(Integer id) {//接收参数
        log.info("通过id删除: " + id);
        deptService.deleteById(id);
        return Result.success();
    }

    /**
     * Content-Type提交过来的数据格式：application/json
     * 接收json数据: 使用@RequestBody，用实体类对象。json数据中的key必须与实体类的属性名相同，类型也要相同
     */
    @PostMapping
    @OperationLog
    public Result add(@RequestBody Dept dept) {
        log.info("新增部门: " + dept);
        //调用业务添加部门
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 通过id查询部门信息
     * /depts/1 路径中的参数
     *
     * @PathVariable("id") Integer 形参名称与参数名不一致时需要取别名
     * @PathVariable Integer id 形参与参数名一致时，无须取别名
     */
    //@GetMapping("/depts/{id}/{a}") 接收多个参数，【注意】实际参数的类型要与形参类型一致
    //public Result getInfo(@PathVariable Integer id,@PathVariable Integer a){
    @GetMapping("/{id}")
    public Result getInfo(@PathVariable Integer id) {
        log.info("通过id查询部门信息: " + id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }


    /**
     * 修改提交
     */
    @PutMapping
    @OperationLog
    public Result update(@RequestBody Dept dept) {
        System.out.println("修改部门提交：" + dept);
        //调用业务层更新部门
        deptService.update(dept);
        return Result.success();
    }

}
